package utils;

import java.lang.reflect.Field;

import play.Play;
import play.jobs.Job;
import play.jobs.OnApplicationStart;

@SuppressWarnings("rawtypes")
@OnApplicationStart
public final class SystemParam extends Job {
	
	/**
	 * 省份列表
	 */
	public static final String PROVINCES = "";

	/**
	 * 同步时分页的大小
	 */
	public static int RECORDCOUNT = 100;
	
	/**
	 * 异步调用时的休眠时间
	 */
	public static int AWAITTIME = 1000;

	/**
	 * 请求超时时间
	 */
	public static int HTTP_TIMEOUT = 6000;

	/**
	 * 同步条数过快等待时间
	 */
	public static int SYNC_SLEEPTIME = 5000;

	/**
	 * 请求数超过时线程等待时间
	 */
	public static int THREAD_SLEEPTIME = 500;

	/**
	 * 允许同时发送的最大请求总数
	 */
	public static int HTTP_MAXSIZE = 50;
	
	/**
	 * 向kafka发消息时的缓存记录数
	 */
	public static int KAFKA_BUFFERSIZE = 100;

	/**
	 * 向kafka发消息时的缓存时间
	 */
	public static int KAFKA_TIMEOUT = 6000;
	
	/**
	 * 写入中心消费消息批量数
	 */
	public static int SYNC_CONSUMER_BATCH_SIZE = 1000;
	
	/**
	 * 守护消息队列时间间隔 (单位:秒)
	 */
	public static int MONITOR_CONSUMER_PERIOD= 20;
	
	/**
	 * 守护消息队列线程启动延迟时间 (单位:秒)
	 */
	public static int MONITOR_CONSUMER_DELAY = 20;
	
	/**
	 * 不消费的主题（用“,”分隔）
	 */
	public static String TOPIC_NOT_CONSUME="";
	/**
	 * 用来控制httpsize的标记
	 */
	public static enum HttpMark {
		receive,
		send
	}
	
	public SystemParam() {
		for (Field f : this.getClass().getFields()) {
			if (f.getModifiers() == 25) {
				continue;
			}
			Object o = Play.configuration.getProperty(f.getName());
			if (o != null) {
				Object value = o;
				if (f.getType().getName().equals("int")) {
					value = Integer.parseInt(o.toString());
				} else if (f.getType().getName().equals("Long")) {
					value = Long.parseLong(o.toString());
				} else if (f.getType().getName().equals("float")) {
					value = Float.parseFloat(o.toString());
				} else if (f.getType().getName().equals("boolean")) {
					if ("1".equals(o.toString())) {
						value = true;
					} else {
						value = Boolean.parseBoolean(o.toString());
					}

				}
				try {
					f.set(this, value);
				} catch (Exception e1) {
				}
			}
		}
	}
}
